/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Interfaz.Altas;

import static Auxiliares.MensajesCodigosError.CAMPO_OBLIGATORIO;
import Controladores.ControladorCamposTexto;
import Controladores.GestorEquiposComputo;
import Controladores.GestorMensajes;
import Modelo.EquipoComputo;
import java.awt.Color;
import java.awt.event.KeyEvent;
import javax.swing.JOptionPane;

/**
 *
 * @author Marko
 */
public class InterfazAltaEquipoComputo extends javax.swing.JDialog {

    /**
     * Creates new form InterfazAltaAlumno
     * @param _pantallaPadre
     * @param _modal
     */
    public InterfazAltaEquipoComputo(
     java.awt.Frame _pantallaPadre,
     boolean _modal
    ) {
        super(_pantallaPadre,"Alta Equipo Computo", _modal);
        initComponents();
        
        establecerFondo();
        controladorCampos = new ControladorCamposTexto();
        administradorMensajes = new GestorMensajes();
        this.setLocationRelativeTo(_pantallaPadre);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabelMarcaLaptop = new javax.swing.JLabel();
        jTextFieldMarca = new javax.swing.JTextField();
        jLabelNumeroInventario = new javax.swing.JLabel();
        jTextFieldNumeroInventario = new javax.swing.JTextField();
        jLabelDescripcion = new javax.swing.JLabel();
        jButtonAceptar = new javax.swing.JButton();
        jButtonCancelar = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextAreaDescripcion = new javax.swing.JTextArea();
        jLabelArticulo = new javax.swing.JLabel();
        jTextFieldArticulo = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jLabelMarcaLaptop.setText("Marca del Equipo");

        jTextFieldMarca.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextFieldMarcaFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextFieldMarcaFocusLost(evt);
            }
        });
        jTextFieldMarca.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jTextFieldMarcaKeyPressed(evt);
            }
            public void keyTyped(java.awt.event.KeyEvent evt) {
                jTextFieldMarcaKeyTyped(evt);
            }
        });

        jLabelNumeroInventario.setText("Numero de Inventario");

        jTextFieldNumeroInventario.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextFieldNumeroInventarioFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextFieldNumeroInventarioFocusLost(evt);
            }
        });
        jTextFieldNumeroInventario.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jTextFieldNumeroInventarioKeyPressed(evt);
            }
            public void keyTyped(java.awt.event.KeyEvent evt) {
                jTextFieldNumeroInventarioKeyTyped(evt);
            }
        });

        jLabelDescripcion.setText("Descripcion del Equipo");

        jButtonAceptar.setText("Aceptar");
        jButtonAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonAceptarActionPerformed(evt);
            }
        });
        jButtonAceptar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jButtonAceptarKeyPressed(evt);
            }
        });

        jButtonCancelar.setText("Cancelar");
        jButtonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonCancelarActionPerformed(evt);
            }
        });

        jTextAreaDescripcion.setColumns(20);
        jTextAreaDescripcion.setRows(5);
        jTextAreaDescripcion.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextAreaDescripcionFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextAreaDescripcionFocusLost(evt);
            }
        });
        jScrollPane1.setViewportView(jTextAreaDescripcion);

        jLabelArticulo.setText("Articulo");

        jTextFieldArticulo.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextFieldArticuloFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextFieldArticuloFocusLost(evt);
            }
        });
        jTextFieldArticulo.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jTextFieldArticuloKeyPressed(evt);
            }
            public void keyTyped(java.awt.event.KeyEvent evt) {
                jTextFieldArticuloKeyTyped(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabelNumeroInventario)
                            .addComponent(jLabelArticulo))
                        .addGap(26, 26, 26)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jTextFieldNumeroInventario, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18)
                                .addComponent(jLabelMarcaLaptop)
                                .addGap(18, 18, 18)
                                .addComponent(jTextFieldMarca, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(jTextFieldArticulo, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addContainerGap(20, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabelDescripcion)
                            .addComponent(jButtonCancelar))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addGap(91, 91, 91)
                                .addComponent(jButtonAceptar))
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 284, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(0, 0, Short.MAX_VALUE))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextFieldNumeroInventario)
                    .addComponent(jLabelNumeroInventario, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabelMarcaLaptop, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextFieldMarca))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelArticulo)
                    .addComponent(jTextFieldArticulo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabelDescripcion, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButtonAceptar)
                    .addComponent(jButtonCancelar))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButtonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAceptarActionPerformed
        registrarNuevoEquipoComputo();
    }//GEN-LAST:event_jButtonAceptarActionPerformed

    private void jButtonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCancelarActionPerformed
        dispose();
    }//GEN-LAST:event_jButtonCancelarActionPerformed

    private void jTextFieldNumeroInventarioKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldNumeroInventarioKeyPressed
        controladorCampos.enterTab(evt);
    }//GEN-LAST:event_jTextFieldNumeroInventarioKeyPressed

    private void jTextFieldNumeroInventarioFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldNumeroInventarioFocusLost
        String numInventario = jTextFieldNumeroInventario.getText();
        if(!numInventario.equals("")){
            jTextFieldNumeroInventario.setBackground(Color.green);
        }else{
            administradorMensajes.mensajeError(CAMPO_OBLIGATORIO,jTextFieldNumeroInventario);
        }
    }//GEN-LAST:event_jTextFieldNumeroInventarioFocusLost

    private void jTextFieldNumeroInventarioFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldNumeroInventarioFocusGained
        jTextFieldNumeroInventario.setToolTipText(null);
        jTextFieldNumeroInventario.setBackground(Color.white);
    }//GEN-LAST:event_jTextFieldNumeroInventarioFocusGained

    private void jTextFieldMarcaKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldMarcaKeyPressed
        controladorCampos.enterTab(evt);
    }//GEN-LAST:event_jTextFieldMarcaKeyPressed

    private void jTextFieldMarcaFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldMarcaFocusLost
        String marca = jTextFieldMarca.getText();
        if(!marca.equals("")){
            jTextFieldMarca.setBackground(Color.green);
        }else{
            administradorMensajes.mensajeError(CAMPO_OBLIGATORIO, jTextFieldMarca);
        }
    }//GEN-LAST:event_jTextFieldMarcaFocusLost

    private void jTextFieldMarcaFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldMarcaFocusGained
        jTextFieldMarca.setToolTipText(null);
        jTextFieldMarca.setBackground(Color.white);
    }//GEN-LAST:event_jTextFieldMarcaFocusGained

    private void jButtonAceptarKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jButtonAceptarKeyPressed
        if(evt.getKeyCode() == KeyEvent.VK_ENTER){
            registrarNuevoEquipoComputo();
        }
    }//GEN-LAST:event_jButtonAceptarKeyPressed

    private void jTextAreaDescripcionFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextAreaDescripcionFocusGained
        jTextAreaDescripcion.setToolTipText(null);
        jTextAreaDescripcion.setBackground(Color.white);
    }//GEN-LAST:event_jTextAreaDescripcionFocusGained

    private void jTextAreaDescripcionFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextAreaDescripcionFocusLost
        String descripcion = jTextAreaDescripcion.getText();
        if(!descripcion.equals("")){
            jTextAreaDescripcion.setBackground(Color.green);
        }else{
            administradorMensajes.mensajeError(CAMPO_OBLIGATORIO, jTextAreaDescripcion);
        }
    }//GEN-LAST:event_jTextAreaDescripcionFocusLost

    private void jTextFieldArticuloFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldArticuloFocusLost
        String articulo = jTextFieldArticulo.getText();
        if(!articulo.equals("")){
            jTextFieldArticulo.setBackground(Color.green);
        }else{
            administradorMensajes.mensajeError(CAMPO_OBLIGATORIO, jTextFieldArticulo);
        }
    }//GEN-LAST:event_jTextFieldArticuloFocusLost

    private void jTextFieldArticuloFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldArticuloFocusGained
        jTextFieldArticulo.setToolTipText(null);
        jTextFieldArticulo.setBackground(Color.white);
    }//GEN-LAST:event_jTextFieldArticuloFocusGained

    private void jTextFieldArticuloKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldArticuloKeyPressed
        controladorCampos.enterTab(evt);
    }//GEN-LAST:event_jTextFieldArticuloKeyPressed

    private void jTextFieldNumeroInventarioKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldNumeroInventarioKeyTyped
        controladorCampos.formatoNumerico(evt);
    }//GEN-LAST:event_jTextFieldNumeroInventarioKeyTyped

    private void jTextFieldMarcaKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldMarcaKeyTyped
        controladorCampos.formatoAlfabetico(evt);
    }//GEN-LAST:event_jTextFieldMarcaKeyTyped

    private void jTextFieldArticuloKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldArticuloKeyTyped
        controladorCampos.formatoAlfabetico(evt);
    }//GEN-LAST:event_jTextFieldArticuloKeyTyped

    /**
     * construye el equipo de computo a partir de los datos en los campos
     * @return Devuelve el equipo de computo
     */
    private EquipoComputo contruirEquipoComputo(){
        EquipoComputo nuevoEquipo = new EquipoComputo();
        
        String numeroInventario = jTextFieldNumeroInventario.getText();
        nuevoEquipo.establecerNumInventario(numeroInventario);
        
        String marca = jTextFieldMarca.getText();
        nuevoEquipo.establecerMarca(marca);
        
        String descripcion = jTextAreaDescripcion.getText();
        nuevoEquipo.establecerDescripcion(descripcion);
        
        String articulo = jTextFieldArticulo.getText();
        nuevoEquipo.establecerNombreArticulo(articulo);
        
        return nuevoEquipo;
    }
    
    /**
     * pide la confirmacion para dar de alta la nueva laptop
     * @return verdadero en caso de ser aceptada la nueva alta
     */
    private boolean ConfirmarAlta(){
        boolean AltaConfirmada = true;
        int ConfirmarAlta = JOptionPane.showConfirmDialog(
                    null,
                    "¿Desea dar de alta al nuevo equipo computo?",
                    "Alta de equipo de computo",
                    JOptionPane.OK_CANCEL_OPTION,
                    JOptionPane.INFORMATION_MESSAGE
                    );
        
        if(ConfirmarAlta == JOptionPane.OK_OPTION){
            return AltaConfirmada;
        }else{
            return !AltaConfirmada;
        }// IF
    }
    
    /**
     * para que un campo sea considerado correcto no debe tener ningun mensaje asignado a el
     * @return Devuelve verdadero si y solo si todos los campos estan correctos
     * 
     */
    private boolean esFormularioCorrecto(){
        if(jTextFieldNumeroInventario.getToolTipText() == null
                && jTextFieldMarca.getToolTipText() == null
                && jTextAreaDescripcion.getToolTipText() == null
                && jTextFieldArticulo.getToolTipText() == null){
            boolean sinErrores = true;
            return sinErrores;
        }
        
        boolean conErrores = false;
        return conErrores;
    }
    
    /**
     * establece el fondo de color blanco
     */
    private void establecerFondo(){
        //cambia el color dle jframe
        this.getContentPane().setBackground(Color.white);
    }
    
    /**
     * inicia el proceso de registro del nuevo equipo de computo
     */
    private void registrarNuevoEquipoComputo(){
        boolean esFormularioCorrecto = esFormularioCorrecto();
        if(esFormularioCorrecto){
            if(ConfirmarAlta()){     
                EquipoComputo nuevoEquipo = contruirEquipoComputo();
                GestorEquiposComputo administrador = new GestorEquiposComputo();
                administrador.agregar(nuevoEquipo);
                dispose();
            }
        }
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButtonAceptar;
    private javax.swing.JButton jButtonCancelar;
    private javax.swing.JLabel jLabelArticulo;
    private javax.swing.JLabel jLabelDescripcion;
    private javax.swing.JLabel jLabelMarcaLaptop;
    private javax.swing.JLabel jLabelNumeroInventario;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextAreaDescripcion;
    private javax.swing.JTextField jTextFieldArticulo;
    private javax.swing.JTextField jTextFieldMarca;
    private javax.swing.JTextField jTextFieldNumeroInventario;
    // End of variables declaration//GEN-END:variables
    private final GestorMensajes administradorMensajes;
    private final ControladorCamposTexto controladorCampos;
}